<?php
/**
 * 分布式添加文档控制中心
 * 1、目前只能固定添加某个栏目的新闻： 新闻标题和内容
 * TODO 未来可以实现功能：
 * 1、栏目选择
 * 2、内容模型选择
 * 3、添加人员名称定义
 */

date_default_timezone_set('Asia/Shanghai');
header("content-Type: text/html; charset=utf-8"); //语言强制
header('Cache-Control:no-cache,must-revalidate');
header('Pragma:no-cache');

//======================================================================================================================
//region 定义常量
//======================================================================================================================
define("AUTH_TOKEN", 'xslooi');  //通信密匙
define("SYNC_SCRIPT", '/sync_archive.php');  //通信脚本名称
define('ROOT_DIR', str_replace("\\", '/', dirname(__FILE__)));  //网站根目录


$site_url_array = array(
    'http://location', //TODO 提交默认值从1开始，现在0预留无作用
    'http://www.road-lamp.cn',
    'http://www.china-traffic.com',
    'http://www.zhgezm.com',
    'http://www.feipuzm.com',
    'http://www.xadgzm.com',
    'http://www.jszgld.com',
    'http://www.qitaihn.com',
    'http://www.hnguopin.com',
    'http://www.olang888.com',
//    'http://localhost.oulang.com',  //本地测试连接
);
//endregion
//======================================================================================================================
//region 过滤参数
//======================================================================================================================
if(!isset($_POST['sitename']) || !isset($_POST['title']) || !isset($_POST['content'])){
    exit('Request Error!');
}
//endregion
//======================================================================================================================
//region 组合参数
//======================================================================================================================
$allow_urls = array();

if(isset($_POST['sitename']) && is_array($_POST['sitename'])){
    foreach($_POST['sitename'] as $item){
        $allow_urls[] = $site_url_array[intval($item)] . SYNC_SCRIPT;
    }
}


if(count($allow_urls) > 0){

//  1、先上传图片（图片上传失败）还可以直接处理文档内容，再上传文档内容？或者先上传内容失败可以重试？

//  2、上传文档内容
    $post_data = array();
    $post_data['nonce_str'] = getNonceStr();
    $auth_token = md5($_POST['title'] . $_POST['content'] . $post_data['nonce_str'] . AUTH_TOKEN);

    $post_data['title'] = $_POST['title'];
    $post_data['content'] = $_POST['content'];
    $post_data['token'] = $auth_token;

    foreach($allow_urls as $key=>$value){
        $allow_urls[$key] = array(
            'url' => $value,
            'result' => curl_request($value, $post_data)
        );
    }
}


//endregion
//======================================================================================================================
//region 显示结果
//======================================================================================================================
echo '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>路灯添加文档处理程序</title></head><body>';
echo "<h1><a href='index.html'>返回主页面</a></h1>";
echo "<table border='1' width='100%'>";
echo "<tr><th>网址</th><th>结果</th></tr>";
foreach($allow_urls as $item){
    showResult($item);
}
echo "</table>";
echo "<h1><a href='index.html'>返回主页面</a></h1>";

echo '</body></html>';
//endregion
//======================================================================================================================
//region 函数库
//======================================================================================================================
/**
 * 表格显示提交列表
 * @param $item
 */
function showResult($item){
    if(false !== stripos($item['result'], 'success')){
        $result = json_encode(json_decode($item['result']), JSON_UNESCAPED_UNICODE);
        if(!$result){
            $result = $item['result'];
        }
        echo "<tr style='color: green;'><td>{$item['url']}</td><td>{$result}</td></tr>";
    }
    else{
        echo "<tr style='color: red;'><td>{$item['url']}</td><td>{$item['result']}</td></tr>";
    }
}

/**
 * 生成随机字符串
 * @param int $lenth
 * @return string
 */
function getNonceStr($lenth=16){
    $charts = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    $max = 61;
    $noncestr = "";

    for($i = 0; $i < $lenth; $i++)
    {
        $noncestr .= $charts[mt_rand(0, $max)];
    }

    return $noncestr;
}

/**
 * 模拟浏览器提交函数
 * @param $url  访问的URL
 * @param string $post  post数据(不填则为GET)
 * @param string $cookie  提交的$cookies
 * @param int $returnCookie  是否返回$cookies
 * @return mixed|string
 */
function curl_request($url,$post='',$cookie='', $returnCookie=0){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
    curl_setopt($curl, CURLOPT_REFERER, "http://localhost.com");
    if($post) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
    }
    if($cookie) {
        curl_setopt($curl, CURLOPT_COOKIE, $cookie);
    }
    curl_setopt($curl, CURLOPT_HEADER, $returnCookie);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    if (curl_errno($curl)) {
        return curl_error($curl);
    }
    curl_close($curl);
    if($returnCookie){
        list($header, $body) = explode("\r\n\r\n", $data, 2);
        preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);
        $info['cookie']  = substr($matches[1][0], 1);
        $info['content'] = $body;
        return $info;
    }else{
        return $data;
    }
}
//endregion